package com.king.collect;

/**
 * Created by Administrator on 2015/4/24.
 */

import com.google.common.collect.ImmutableMap;

import java.util.Iterator;
import java.util.Map;

/**
 * 为什么要使用不可变集合
 * 1：当对象被不可信的库调用时，不可变形式是安全的；
 * 2：不可变对象被多个线程调用时，不存在竞争态条件问题
 * 3：不可变集合不需要考虑变化，因此可以节省时间和空间
 * 4：不可变对象因为固定不变，可以作为常量来使用
 * 5：不可变集合没有add(),和delete()方法
 */
public class ImmutableDemo {
    public static void main(String[] args) {
        ImmutableDemo immutableDemo = new ImmutableDemo();
        immutableDemo.buildByOf();
        immutableDemo.buildByBuilder();

    }
  /*
   Map<Integer,String> map =new HashMap<Integer, String>();
    map.put(123,"aa");
    map.put(456,"bb");
    */
    public void buildByOf(){
        ImmutableMap<Integer,String> map = ImmutableMap.of(123,"xiaohuo",456,"xiaoming",789,"xiaobai");
        System.out.println("of创建不可变集合 ：" + map.toString());
    }
  /*
  使用builder创建，为什么要使用build创建
  of创建少量的方便，list 12，set 6，map 5对
   builder大量的
  */

    public void  buildByBuilder(){

        ImmutableMap<String,String> immutableMap = ImmutableMap.<String,String>builder()
                .put("png", "image/png")
                .put("gif", "image/gif")
                .put("jpg", "image/jpeg")
                .put("jpeg", "image/jpeg")
                .put("tiff", "image/tiff")
                .put("css", "text/css")
                .put("html", "text/html")
                .put("txt", "text/plain")
                .put("js", "application/x-javascript")
                .put("json", "application/json")
                .put("pdf", "application/pdf")
                .put("zip", "application/zip")
                .put("xml", "text/xml")
                .build();
        //System.out.println("builder创建的量大的不可变集合 :" + immutableMap);
        for(Map.Entry<String,String> entry :immutableMap.entrySet()) {
            System.out.println("key=" + entry.getKey() + "    value=" + entry.getValue());
        }
        System.out.println("*****************************************************");
            Iterator<Map.Entry<String,String>> iterator = immutableMap.entrySet().iterator();
            while(iterator.hasNext()){
                Map.Entry<String,String> entry1= iterator.next();
                System.out.println("key=" + entry1.getKey()+"    value=" + entry1.getValue());
            }
        }
    }

